package org.aristotle.generator.model.entity;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.aristotle.generator.model.property.AriProperty;

import java.util.List;
import java.util.Map;

@Getter
@Setter
public class Entity {
    private String name;	// 实体名(驼峰)
    private String chName;	// 中文名
    private String tableName;	// 表名(下划线方式)

    private String ulName;	// underline(下划线式名，全小写)
    private String uulName;    // upper underline全大写下划线
    private String lowerName;	// first lower case 首字母小写驼峰
    private String upperName;	// first upper case 首字母大写驼峰


    private Boolean assignKey;  // 自动分配ID,若为false则自动主键自增

    private Boolean logicDelete;    // 是否逻辑删除
    private Boolean updateTime;     // 添加updateTime字段
    private Boolean createTime;     // 添加createTime字段

    private AriProperty key;    // 主键（系统添加）
    private AriProperty represent;  // 代表字段

    private List<AriProperty> propertyList;	// 非键属性列表（用户输入，其他属性根据该属性生成）

    private List<AriProperty> foreignKeyList;   // 外键列表（系统添加）

    private List<AriProperty> searchList;	// 用于查询的非键字段（系统添加）

    private List<AriProperty> dictPropList;     // 需要用到字典的字段

    private List<AriProperty> tableColumnsList;	// 表格用于显示的非键字段（系统添加）

    private List<Entity> relationEntityList;	// 多对多关系中间表（系统添加）

    private List<Entity> toManyEntityList;	// 一对多(本类是一)联系实体类（系统添加）
    private List<Entity> toOneEntityList;	// 多对一(本类是多)联系实体类（系统添加）

    private Boolean relation; // 是否中间表
    private Map<String,List<Entity>> relationColumnsMap;	// 中间表时使用 key: 实体名，对应显示的tableColumns


}
